{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "source": [
    "import numpy as np\r\n",
    "import pandas as pd\r\n",
    "import matplotlib.pyplot as plt\r\n",
    "from matplotlib.ticker import FuncFormatter\r\n",
    "from matplotlib.pyplot import MultipleLocator, plot\r\n",
    "\r\n",
    "latency = pd.read_csv('latency.csv').apply(pd.to_numeric).values"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "请求延迟分布情况"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "source": [
    "plt.subplot(211)\r\n",
    "plt.plot(latency)\r\n",
    "plt.subplot(212)\r\n",
    "plt.plot(sorted(latency, reverse=True))\r\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "用排队论模型来拟合实测数据"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "source": [
    "# 百分比换算\r\n",
    "def to_percent(y, position):\r\n",
    "    return str(100 * round(y, 2)) + \"%\"\r\n",
    "\r\n",
    "# 设置纵轴为百分比\r\n",
    "fomatter = FuncFormatter(to_percent)\r\n",
    "ax = plt.gca()\r\n",
    "# ax.xaxis.set_major_locator(MultipleLocator(5))\r\n",
    "ax.yaxis.set_major_formatter(fomatter)\r\n",
    "# 避免横轴数据起始位置与纵轴重合，调整合适座标范围\r\n",
    "x_min = max(min(latency) * 0.8, min(latency) - 5)\r\n",
    "x_max = max(latency)\r\n",
    "plt.xlim(x_min, x_max)\r\n",
    "# 绘制实际百分位延迟\r\n",
    "plt.hist(latency, cumulative=True, histtype='step', weights=[1./ len(latency)] * len(latency))\r\n",
    "\r\n",
    "# 排队论模型\r\n",
    "# F(t)=1-e^(-1*a*t)\r\n",
    "alpha = 0.3\r\n",
    "X_qt = np.arange(min(latency), max(latency), 1.)\r\n",
    "Y_qt = 1 - np.exp(alpha * (min(latency) - X_qt))\r\n",
    "# 绘制排队论模型拟合\r\n",
    "plt.plot(X_qt, Y_qt)\r\n",
    "\r\n",
    "plt.grid()\r\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAD4CAYAAAAZ1BptAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAh3ElEQVR4nO3deZgUhb3u8e9vVpZBNnFEQEHFBYnbGGIkLqhR4so1JkevJpirITmaRHP0HPXmGGOMieYmbsnVHEWjRo+aaBK5riE6RIgrKDIgUciAy8iAOGyDLLP87h9VMzRDNzPTPd1V0/1+nqeerqqu6nmnlH6nlq42d0dERCSZoqgDiIhIfKkkREQkJZWEiIikpJIQEZGUVBIiIpJSSdQBetquu+7qw4YNo3///lFH2c7GjRtjlwnimSuOmSCeueKYCeKZK46ZID655s2bt9rdh+3whLvn1VBVVeXV1dUeN3HM5B7PXHHM5B7PXHHM5B7PXHHM5B6fXMBcT/KeqsNNIiKSkkpCRERSUkmIiEhKKgkREUlJJSEiIimpJEREJKVOS8LM7jWzVWa2MGHeEDObaWZLwsfB4Xwzs9vNbKmZLTCzw1O8ZpWZ1YTL3W5mFs6/KVzvgYRlzzezyzL+TUVEpNu68mG6+4BfAw8kzLsKeN7dbzSzq8LpK4EvAWPD4XPAneFjR3cC3wReBZ4GJpvZS8Dh7n6wmU03s88AS4FvAJPT+N1EJM4Sv6agfTzZvKQrp36tFKy1CZq37rjuznL1qOSvW9SyBZo2ZelndoEVQUl5yqc7LQl3f9HMRneYfSZwXDh+PzCLoCTOBB4IP5jxipkNMrPh7r6iPY/ZcGAXd38lnH4AmALMAUrDvYp+QBNwBfArd2/q9BcVySZ3ilq2wqcN0PQpNG+B5s3QtDl4TBxamqBla7BM23j741ZobQ6GlqZt423T3gKt4eAt4XMt4K3BuLdum/YWqjash7f7hdNJBjx402uf5+G8VOPQ/mbWPq/D4w7PdVwHjnWHv7Hj8xE6FuDFqFPs6BiA2REG2GsifOPplE+ne1uOyoQ3/nqgMhwfAXyQsNyH4bwVCfNGhPO3W8bdN5jZ08CbwPPAOuBz7n59Z2HMbBowDaCyspLGxkZmzZrV7V8qm+KYCeKZKxuZilq2UNq0PmHYQEnzRkqaN1Lc8iklzZ+G05+G05soat1Mcctmilu2UNyymWNozfgfc6uV4FaCWzGtRcW4tQ0luBWF40Xt41CUMN+2m4ZSmkoGs7m1tH0+ZsEjFi6/7XHbeHCUecf5JEyz3fS2eW3TdHiNRMbWpq2UlnX869R2GN/2c3e+XDK+w1OplwXYunUrZWVlXVo2W5L9vlu3bKWsvIynapv4tCn3ZfrRkqHMuOqplM9nfO8md3cz65HfzN1/DvwcwMymAz80s4uAk4AF7v6TFOvdBdwFcMQRR3hFRQXHHXdcT0TqMbNmzYpdJohnri5ncodNa2DDCli/AtbXheN1wfTGj4O//D9dHfz1n0pRCZTvAn12CR+HQlkFlPWD0n7t47UfrmTv/cdDaV8o6QulfaCkT7CrXtI3fAyH4rJwKIXicLqomKKkb4rpi+N/P4hnrjhmgm25br7qKZbfeGokGW4H7Kbkz6VbEivbDiOFh49WhfPrgFEJy40M5yWqC+enXMbMDiOo+neAn7n7yWb2WzMb6+5L0swsvZE7bKiHhn/CJ/+ET5ZCQ20wvmY5NHc8lmvQfxjsMhwqKmG3A6Hf0O2H/rtC38HQZ2BQCqV9IeHNe+KNL1C3NsUx4sUdZzSHw8Ye+5W77dnUfwVGKo654pgJ4NmnGDGob9Qpkkq3JGYAU4Ebw8cnEuZ/x8weIThhvS7xfARAWCzrzexIghPXXwd+1eH1ryc4fFQKFIfzWgnOVUi+atoEKxexR90zMONxWLEAVi+BpoQ34OIyGDwGhu4D+xwPA0fAgOGwy4iwGHaHkrLUP6ML6tZuSvoXXRz/Eo1jJohnrjhmgvjmatNpSZjZwwQnqXc1sw+BawnK4fdmdiHwHvDVcPGngVMIrkr6lODKpLbXme/uh4aTFxNcNdUXeCYc2pabQnA3wo/a1jOzGoLDTW+l+XtK3LS2wsoaeO9lWPEWrJgPH78D3sJ+wBqvYGHraJb40dT6cJb77iz33fnIh9K6sWj7s1oArA6HmoyjxfUvOpEodOXqpnNTPHVCkmUduCTF6xyaMD4XGJ9iuT8Df06YvoLgKifp7RqWQe2sYFj2ImxqCOb33w32OBQOOBWGH8JR9zfw0s++ztFmHB1hXBHJwy8dkp6x0+PyXVTOViYVzefYoreYWLSQPYs+BmCFD+Gl1oOY0zKel1vHUb95KHxC+07A0D7DtjtHICLRUUlIUqmOy3eqtSXYS6j5Ayz+f7BlPZQPhDFHw97HwZhjGb7rWL5sxpdTvETcLskVKWQqCcmce3BeoeYPUPMYNNZD2QAYdwYc/FXY6wtQrP/VRHoj/cuV9DVthjd/B6/dDavfgaJSGPvFoBj2mxxcWioivZpKQrpvSyPM+y289CtoXAkjquC0W2DcFOg3JOp0ItKDVBLSdZvWBnsNr9wRXJk05hg46+7gUSeaRfKSSkI6t3F1UAyv3R2ciN5vMhx9BYz6bNTJRCTLVBKSmju88QD85ZqgHMadCUdfDsMPjjqZiOSISkKS2tNWwv2nw/LZMPpoOPWXMGz/qGOJSI6pJGR7rS3wyp08V3YdrOgDp98Gh0/VOQeRAqWSkG1Wvg0zvgN18/h762GcePFDwQ30RKRgqSQk+Ea02b+EF38RfKfCl+/hoof6sFwFIVLwVBIFrrh5Izz4ZVj2N/jMV2DyjcH3LRDT++6LSE6pJArZujoOe/Nq2FQHZ94Bh50XdSIRiRmVREz1xF1Yd+YAe5/flv2cCjZxftO/M+fRQfDotr0HfaeCiIBKIrbSvgtrV/zzBXj0BigfwOv7X8uDp12QnZ8jIr1eUdQBJMfefAge+goM2hMu+isbK0ZHnUhEYkwlUSjcYdZN8MTFsNdE+F/P6PJWEemUDjcVAnd48vvBnVsPORdOvx1KyqJOJSK9gPYkCsHsXwQFMfFSmHKnCkJEukwlke8W/Qle+Akc/C9w4nW6vYaIdItKIp/VzYM/fRtGHQln/EoFISLdppLIV2s/gIfPhYpKOOchKCmPOpGI9EI6cZ2PtmyAh8+Bpk3w9SfC22yIiHSfSiLftLbA49+EVW/DeX+A3Q6MOpGI9GIqiXwz84fw7jNwyi9g3xOjTiMivZzOSeSTeffBy7+GCd+CCd+MOo2I5AGVRL54/xV46vJg7+Hkn0adRkTyhEoiHzRvgRnfhV32gLPvhWIdRRSRnqF3k3zw99tg9btw3mPQZ2DUaUQkj2hPordbvTT42tGDzoKxX4w6jYjkGZVEb+YOT30fSvrA5J9FnUZE8lBGJWFm3zezRWa20MweNrM+ZjbGzF41s6Vm9qiZJb2bnJldHS7zjpmdHM4bZmZzwtebkrDsE2a2RyZZ89KCR2HZi3DitTBg96jTiEgeSrskzGwE8D3gCHcfDxQD5wA3Abe4+77AGuDCJOuOC5c9CJgM3GFmxcC5wG+ACcBl4bKnA2+6+0fpZs1LnzbAc/8bRn4Wqr4RdRoRyVOZHm4qAfqaWQnQD1gBHA88Fj5/PzAlyXpnAo+4+xZ3XwYsJSiGpvB1yoGW8HUvA36eYc78M/Ma2LwOTr8NinTUUESyw9w9/ZXNLgVuADYBfwEuBV4J9yIws1HAM+GeRuJ6vw6XezCcvgd4BpgJ/DdQCVxJsKex3t3v6yTHNGAaQGVlZdX06dOpqKhI+/fKhsbGxm5luuDZjdw3uX/S5wauXchh83/A+6POonafqTnNlQtxzATxzBXHTBDPXHHMBPHJNWnSpHnufsQOT7h7WgMwGHgBGAaUAn8GzgeWJiwzCliYZN1fA+cnTN8DnJ3k9WcCFcDdBHsnn+8sV1VVlVdXV3vcdDfTXlc+mfyJps3ut1e53/IZ9y0bc54rF+KYyT2eueKYyT2eueKYyT0+uYC5nuQ9NZPjFCcCy9z9Y3dvAv4ITAQGhYeJAEYCdUnWrQsLhJ0sdw3BXsq5wBxgKvCjDPLmhzm3widL4NSboaxf1GlEJM9lUhLvA0eaWT8zM+AE4G2gGjg7XGYq8ESSdWcA55hZuZmNAcYCr7U9aWZjgZHuPovgHEUr4EDfDPL2fquXBl9FOv7LMFY37xOR7Eu7JNz9VYJDQG8ANeFr3UVwLuHfzGwpMJTgUBJmdoaZ/ThcdxHwe4JSeRa4xN1bEl7+BuAH4fjDwL8CrwO3pZs3Lzx9BZT0hZP1mQgRyY2Mbsvh7tcC13aYXUtwpVLHZWcQ7EG0Td9AUAbJXverCeOrgKMyyZkXPpwLtdVw0k9gQGXUaUSkQOjayd5izi3QZ5A+EyEiOaWS6A1WL4F/PBV8R0R59JfKiUjhUEn0Bi/dDiXlwZcJiYjkkEoi7jbUw1uPwKHnQcWwqNOISIFRScTdK3dCazMc9Z2ok4hIAVJJxNnmdTD3Xhh3JgzZO+o0IlKAVBJxNu8+2LIeJl4adRIRKVAqiZgqowlevgPGHAt7HBZ1HBEpUCqJmJpSPAca6+ELl0UdRUQKmEoijlpb+Vbxk7D7wbD3pKjTiEgBU0nE0TtPs0/RiuBchFnUaUSkgKkk4sYd/n4r77cOg3FTok4jIgVOJRE3778MH77O3S2nQnFG918UEcmYSiJu5twK/Ybyh5Zjo04iIqKSiJVVi2HJczDhW2ymPOo0IiIqiViZ/xAUlcJnL4o6iYgIoJKIj9ZWWPgn2PcE6D806jQiIoBKIj4+fA3Wfxh8f7WISEyoJOJi4eNQ0gf2/1LUSURE2qkk4qClGRb9CfY7GcoHRJ1GRKSdSiIO3psDGz+Gg86KOomIyHZUEnGw8I9QVgFjT4o6iYjIdlQSUWveCotnwP6nQFm/qNOIiGxHJRG12lmwaY2uahKRWFJJRG3h49BnIOxzfNRJRER2oJKIUtMm+MdTcOAZUFIWdRoRkR2oJKK0ZCZs3aBDTSISWyqJKC18HPoPg9FHR51ERCQplURUtjTCu88FXyyk740QkZhSSUTl3WeheROM1wfoRCS+VBJRWfg4DNgDRh0ZdRIRkZRUElHYtCY4aT3+LCjSfwIRia+M3qHMbJCZPWZm/zCzxWb2eTMbYmYzzWxJ+Dg4xbpTw2WWmNnUcF65mT1rZgvN7OKEZe8ys8MzyRor/3gKWpt0qElEYi/TP2NvA5519wOAQ4DFwFXA8+4+Fng+nN6OmQ0BrgU+B0wArg3L5GRgDnAw8LVw2UOAYnd/I8Os8bHwcRg8GvbIn94TkfyUdkmY2UDgGOAeAHff6u5rgTOB+8PF7gemJFn9ZGCmuze4+xpgJjAZaAL6AaWAhcteD1yTbs7YafwYav8WfDbCrPPlRUQilMmexBjgY+C3ZvammU03s/5ApbuvCJepByqTrDsC+CBh+sNw3kxgNPAKcLuZnQG84e4fZZAzXhY/Ad6iD9CJSK9g7p7eimZHELyZT3T3V83sNmA98F13H5Sw3Bp3H9xh3SuAPu7+k3D6GmCTu/8iYZlS4DmCPZPrgD2BB9x9RpIs04BpAJWVlVXTp0+noqIird8rWxobG6moqOCQ+T+gbOs6Xv/sr3a6J3HBsxu5b3L/nOWKkzhmgnjmimMmiGeuOGaC+OSaNGnSPHc/Yocn3D2tAdgdWJ4wfTTwFPAOMDycNxx4J8m65wL/lTD9X8C5HZa5FLgA+CLB+Yti4G+d5aqqqvLq6mqPm+rqavfNG9yvG+I+89pOl9/ryieznsnd47utYiiOueKYyT2eueKYyT0+uYC5nuQ9Ne2P+rp7vZl9YGb7u/s7wAnA2+EwFbgxfHwiyerPAT9NuPLpJODqtifD+acRnLs4HWgFHOibbt7umnjjC9St3dSjr3nMX27ngbJmzn+hD3P++tROlx0xKGe/qohISpneD+K7wENmVgbUAt8gOM/xezO7EHgP+Cq0H576trtf5O4NZnY98Hr4Oj9294aE1/0hcIO7t5rZc8AlQA3wmwzzdlnd2k0sv/HUHnu9WbNmcVzTZni5lAd/9D19wZCI9AoZlYS7zwd2PIYV7FV0XHYucFHC9L3AvSle9/sJ45sJ9jR6v2WzYeQRKggR6TX0cd8cKW7eCCvm646vItKrqCRyZNDat8FbYYxKQkR6D5VEjgxaWwPF5TByQtRRRES6TCWRI4PW1sCoCVDaJ+ooIiJdppLIhU8bqGhcpvMRItLrqCRy4b2XMFznI0Sk11FJ5MLy2bQUlcGIqqiTiIh0i0oiF5bNZt3AcVBSHnUSEZFuUUlk28bVsGoRawd9JuokIiLdppLItuWzAVQSItIrqSSybdlsKKtgw4B9ok4iItJtKolsWz4b9vw8XpTpvRRFRHJPJZFNG+ph9bu69FVEei2VRDYtnxM86kN0ItJLqSSyadmLUD4Qhh8SdRIRkbSoJLJp+WzY6ygoKo46iYhIWlQS2bKuDhpqdT5CRHo1lUS2hJ+P0PkIEenNVBLZsuxF6DsYKsdHnUREJG0qiWxZNhtGfwGKtIlFpPfSO1g2rFkO696H0cdEnUREJCMqiWxYFp6P0ElrEenlVBLZsHw29B8Gww6IOomISEZUEj3Nfdv5CLOo04iIZEQl0dMaamHDR7r0VUTygkqip73/cvA4+gvR5hAR6QEqiZ5WXwOl/WHovlEnERHJmEqip9XXQOVBul+TiOQFlURPam0NSmL4wVEnERHpESqJnrT2PdiyHnbX91mLSH5QSfSk+prgUSUhInlCJdGT6mvAimG3cVEnERHpESqJnlRfA7vuB6V9o04iItIjMi4JMys2szfN7MlweoyZvWpmS83sUTMrS7He1eEy75jZyeG8YWY2x8wWmtmUhGWfMLM9Ms2adfULdKhJRPJKT+xJXAosTpi+CbjF3fcF1gAXdlzBzMYB5wAHAZOBO8ysGDgX+A0wAbgsXPZ04E13/6gHsmbPxk9gfZ1KQkTySkYlYWYjgVOB6eG0AccDj4WL3A9MSbLqmcAj7r7F3ZcBSwmKoQnoB5QDLWZWQlAWP88kZ06s1ElrEck/JRmufyvwH8CAcHoosNbdm8PpD4ERSdYbAbySMN223H+HwzTgSuBi4Hfu/unOQpjZtHAdKisraWxsZNasWWn8OtvrzmuM/ODP7Av8/Z8baPpgx/V6KlNPi2OuOGaCeOaKYyaIZ644ZoL45mrn7mkNwGnAHeH4ccCTwK7A0oRlRgELk6z7a+D8hOl7gLM7LDMYmAlUAHcT7J18vrNcVVVVXl1d7Zna68onu7fCYxe5//LAlE/3RKZsiGOuOGZyj2euOGZyj2euOGZyj08uYK4neU/NZE9iInCGmZ0C9AF2AW4DBplZiQd7EyOBuiTr1oUF0ibZctcANxCcp5gTlsQfgZMzyJw99TU61CQieSftcxLufrW7j3T30QQnoV9w9/OAauDscLGpwBNJVp8BnGNm5WY2BhgLvNb2pJmNBUa6+yyCcxStgAPxvLa0aROsflclISJ5Jxufk7gS+DczW0pwjuIeADM7w8x+DODui4DfA28DzwKXuHtLwmvcAPwgHH8Y+FfgdYI9lfhZtRi8RSUhInkn0xPXAIR/8c8Kx2sJrlTquMwMgj2ItukbCMog2et9NWF8FXBUT+TMGt2OQ0TylD5x3RPqF0D5LjBodNRJRER6lEqiJ9TXQOV4KNLmFJH8one1TLW2Qv1CHWoSkbykksjUmmXQtFElISJ5SSWRqfoFwaNKQkTykEoiUysWQFEJ7HZg1ElERHqcSiJT9TUw7AAoKY86iYhIj1NJZEq34xCRPKaSyETjKmisV0mISN5SSWSi/aT1wdHmEBHJEpVEJtpvxzE+2hwiIlmikshEfQ0M3BP6Do46iYhIVqgkMqGT1iKS51QS6dq6EVYvUUmISF5TSaRr5duAw3CdtBaR/KWSSJduxyEiBUAlka76GugzEAaO6nxZEZFeSiWRrvqa4PMRZlEnERHJGpVEOlpbYOUiHWoSkbynkkjHJ0uheZM+aS0ieU8lkY72T1prT0JE8ptKIh31C6C4DHbdL+okIiJZpZJIR/t3SJRFnUREJKtUEun4+B3YbVzUKUREsk4l0V1Nm2B9HQzdJ+okIiJZp5LorjXLg8che0caQ0QkF1QS3dVQGzwOHhNtDhGRHFBJdFfDsuBxiEpCRPKfSqK7GmqhzyDoNyTqJCIiWaeS6K6GWp2PEJGCoZLorjXLdKhJRAqGSqI7mrfC2ve1JyEiBSPtkjCzUWZWbWZvm9kiM7s0nD/EzGaa2ZLwcXCK9aeGyywxs6nhvHIze9bMFprZxQnL3mVmh6ebtces+wC8VSUhIgUjkz2JZuBydx8HHAlcYmbjgKuA5919LPB8OL0dMxsCXAt8DpgAXBuWycnAHOBg4GvhsocAxe7+RgZZe4YufxWRApN2Sbj7irY3bnffACwGRgBnAveHi90PTEmy+snATHdvcPc1wExgMtAE9ANKgbZv87keuCbdnD2q/fJX7UmISGEwd8/8RcxGAy8C44H33X1QON+ANW3TCctfAfRx95+E09cAm4BbgQeAA4H/AzQCh7v7jzr5+dOAaQCVlZVV06dPp6KiIqPf6YJnN3Lf5P7bzdt3yXSGr5jJ7KMf6fY30jU2NmacKRvimCuOmSCeueKYCeKZK46ZID65Jk2aNM/dj9jhCXfPaAAqgHnAWeH02g7Pr0myzhXAfyZMXwNc0WGZUuAFYABwM/AYcEZneaqqqry6utoztdeVT+4488GvuN8xMa3X64lM2RDHXHHM5B7PXHHM5B7PXHHM5B6fXMBcT/KemtHVTWZWCjwOPOTufwxnrzSz4eHzw4FVSVatA0YlTI8M5yW6mGCv4khgHfAvwOWZ5M1YQy0MGR1pBBGRXMrk6iYD7gEWu/vNCU/NAKaG41OBJ5Ks/hxwkpkNDk9YnxTOa3vtwcBpBCXRD2gFHOibbt6MtbbA2vd0PkJECkomexITCa5AOt7M5ofDKcCNwBfNbAlwYjiNmR1hZtMB3L2B4IT06+Hw43Bemx8CN7h7K0F5HA3UAL/LIG9m1tdBy1aVhIgUlJJ0V3T3OWy7AqmjE5IsPxe4KGH6XuDeFK/9/YTxzQR7GtFqu/xVJSEiBUSfuO6qtstf9RkJESkgKomuaqiF4nLYZUTUSUREckYl0VUNtTB4NBRpk4lI4dA7Xlc16O6vIlJ4VBJd4R7eIlwnrUWksKgkuqJxJTR9qpIQkYKjkuiK9stfdbhJRAqLSqIrdPmriBQolURXNNSCFcOgPaNOIiKSUyqJrmioDQqiuDTqJCIiOaWS6IqGWp2PEJGCpJLojHv4GQld2SQihUcl0ZlNa2DLOpWEiBQklURndPdXESlgKonOtJWELn8VkQKkkuhMwzLAgpv7iYgUGJVEZxpqg9uDl/aJOomISM6pJDqjy19FpICpJDqzRrcIF5HCpZLYmc3rYePHurJJRAqWSmJn1oQ39lNJiEiBUknsjC5/FZECp5LYmbZbhOuchIgUKJXEzjTUQv/doHxA1ElERCKhktgZ3dhPRAqcSmJn9BkJESlwKokUytkKGz7SnoSIFDSVRAp72qpgRCUhIgVMJZHCaKsPRnT5q4gUMJVECnvaymBE5yREpICpJFIYbSuhzyDoNyTqKCIikVFJpLCXrdT5CBEpeCqJFEZbvQ41iUjBy0pJmNlkM3vHzJaa2VVJni83s0fD5181s9Hh/IlmtsDM5prZ2HDeIDP7i5nlrtCatzLCVmtPQkQKXo+/8ZpZMfB/gS8B44BzzWxch8UuBNa4+77ALcBN4fzLgVOAy4Bvh/P+E/ipu7f2dNaU1n1AsblKQkQKXjb+Op8ALHX3WnffCjwCnNlhmTOB+8Pxx4ATzMyAJqBfODSZ2T7AKHeflYWcqenuryIiAJRk4TVHAB8kTH8IfC7VMu7ebGbrgKHAz4AHgE3A14BfEOxJ7JSZTQOmhZONkyZN+gRYncHvELjuqIxfIsGu9ESmnhfHXHHMBPHMFcdMEM9cccwE8cm1V7KZ2SiJtLn7fOBIADM7BlgRjNqjBHsZl7v7yiTr3QXc1TZtZnPd/YichO6iOGaCeOaKYyaIZ644ZoJ45opjJohvrjbZONxUB4xKmB4Zzku6jJmVAAOBT9qeDA89/SdwPXAt8B/A3cD3spBXRERSyEZJvA6MNbMxZlYGnAPM6LDMDGBqOH428IK7e8LzXweedvcGgvMTreHQLwt5RUQkhR4/3BSeY/gO8BxQDNzr7ovM7MfAXHefAdwD/M7MlgINBEUCgJn1Ay4ATgpn3Qw8DWwF/mcXY9zV+SI5F8dMEM9cccwE8cwVx0wQz1xxzATxzQWAbf8HvIiIyDb6xLWIiKSkkhARkZR6fUmY2b1mtsrMFibMG2JmM81sSfg4OAaZfmRmdWY2PxxOyXGmUWZWbWZvm9kiM7s0nB/1tkqVK7LtZWZ9zOw1M3srzHRdOH9MeBuZpeFtZcpylamTXPeZ2bKEbXVoLnOFGYrN7E0zezKcjnRbpcgUh+203Mxqwp8/N5wX6b/BzvT6kgDuAyZ3mHcV8Ly7jwWeD6ejzgRwi7sfGg5P5zhTM8HnTMYRfBblkvB2KVFvq1S5ILrttQU43t0PAQ4FJpvZkQS3j7klvJ3MGoLby+RSqlwA/56wrebnOBfApcDihOmot1WyTBD9dgKYFP78ts9GRP1vcKd6fUm4+4sEV0glSrztx/3AlBhkipS7r3D3N8LxDQT/eEYQ/bZKlSsyHmgMJ0vDwYHjCW4jA9Fsq1S5ImVmI4FTgenhtBHxtuqYKeYi/TfYmV5fEilUuvuKcLweqIwyTILvhHe5vTfKXUoL7rp7GPAqMdpWHXJBhNsrPFQxH1gFzAT+Cax19+ZwkQ+JoMw65nL3tm11Q7itbjGz8hzHupXgA69tN+EcSvTbqmOmNlFuJwhK/S9mNs+C2wlBjP4NJpOvJdEu/JBe5H9tAXcC+xAcJlgB/DKKEGZWATwOXObu6xOfi3JbJckV6fZy9xZ3P5TgjgETgANy+fNT6ZjLzMYDVxPk+ywwBLgyV3nM7DRglbvPy9XP7MxOMkW2nRJ8wd0PJ7hL9iUW3H6oXYzer9rla0msNLPhAOHjqojz4O4rw3/grQS3GJmQ6wxmVkrwRvyQu/8xnB35tkqWKw7bK8yxFqgGPg8MsuA2MpD8djNR5JocHrJzd98C/JbcbquJwBlmtpzgjs/HA7cR7bbaIZOZPRjxdgLA3evCx1XAn8IMkf8b3Jl8LYnE235MBZ6IMAvQ/h+/zf8AFqZaNks/3wg+6b7Y3W9OeCrSbZUqV5Tby8yGmdmgcLwv8EWCcyXVBLeRgWi2VbJc/0h4gzGC49k521bufrW7j3T30QR3TnjB3c8jwm2VItP5UW6n8Of2N7MBbeMEd5VYSAzfr7bj7r16AB4mOBzRRHDs80KCY6LPA0uAvwJDYpDpd0ANsIDgf4rhOc70BYLd2AXA/HA4JQbbKlWuyLYXcDDwZvizFwI/DOfvDbwGLAX+AJTneFulyvVCuK0WAg8CFbnMlZDvOODJOGyrFJki3U7hNnkrHBYBPwjnR/pvsLNBt+UQEZGU8vVwk4iI9ACVhIiIpKSSEBGRlFQSIiKSkkpCRERSUkmIiEhKKgkREUnp/wPC2CNJb0NxHAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     }
    }
   ],
   "metadata": {}
  }
 ],
 "metadata": {
  "orig_nbformat": 4,
  "language_info": {
   "name": "python",
   "version": "3.9.7",
   "mimetype": "text/x-python",
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "pygments_lexer": "ipython3",
   "nbconvert_exporter": "python",
   "file_extension": ".py"
  },
  "kernelspec": {
   "name": "python3",
   "display_name": "Python 3.9.7 64-bit ('lab': conda)"
  },
  "interpreter": {
   "hash": "f487011d6c19380a0f12fb28ca8659fdd2afd3ccddcfad5755f4bb9819179fc2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}